package datastruct.sort;

import java.util.Arrays;

/**
 * @program: DataStructuresAndAlgorithms
 * @description: 插入排序
 * @author: zhang
 * @create: 2020-03-13 11:38
 */
public class InsertSort {


    public static void insertSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int insertValue = arr[i];
            int insertIndex = i - 1;
            while (insertIndex >= 0 && insertValue < arr[insertIndex]) {
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex--;
            }
            //如果结束了循环就代表找到了要插入的位置
            arr[insertIndex + 1] = insertValue;

            //判断是否需要赋值
//            if (insertIndex + 1 != i) {
//                arr[insertIndex + 1] = insertValue;
//            }
        }

    }

    public static void main(String[] args) {

        // 插入排序 将数据分为两个区域，有序区域和无序区域，将无序区域中的树依次与有序区域中数据比较插入。
        int[] arr = {1, 2, 7, 3, 0, 4, 9, 2, 4, 22, 21, 20};
//        int[] arr = new int[80000];
//        for (int i = 0; i < arr.length; i++) {
//            arr[i] = (int) (Math.random() * 8000000);
//        }
        long start = System.currentTimeMillis();
        insertSort(arr);
        System.out.println(System.currentTimeMillis() - start);

        System.out.println(Arrays.toString(arr));

        //        int temp;
//        for (int i = 1; i < arr.length; i++) {
//            for (int j = i - 1; j >= 0; j--) {
//                if (arr[j+1] < arr[j]) {
//                    temp = arr[j+1];
//                    arr[j+1] = arr[j];
//                    arr[j] = temp;
//                }
//            }
//        }

    }
}